package model

import (
	"time"

	"gorm.io/gorm"
)

// User 用户模型

type User struct {
	gorm.Model
	Username    string    `gorm:"size:50;not null;unique" json:"username"`
	Password    string    `gorm:"size:2000;not null" json:"-"` // 不返回密码
	Email       string    `gorm:"size:2000;unique" json:"email"`
	Avatar      string    `gorm:"size:2000" json:"avatar"`
	Bio         string    `gorm:"size:2000" json:"bio"`
	IsAdmin     bool      `gorm:"default:false" json:"is_admin"`
	IsActive    bool      `gorm:"default:true" json:"is_active"`
	LastLoginAt time.Time `json:"last_login_at"`
	Status      int       `gorm:"default:0" json:"status"`
}

// Video 视频模型

type Video struct {
	gorm.Model
	Title         string  `gorm:"size:255;not null" json:"title"`
	Description   string  `gorm:"type:text" json:"description"`
	CoverURL      string  `gorm:"size:2000" json:"cover_url"`
	VideoURL      string  `gorm:"size:2000;not null" json:"video_url"`
	Duration      float64 `json:"duration"`
	Views         int64   `gorm:"default:0" json:"views"`
	LikesCount    int64   `gorm:"default:0" json:"likes_count"`
	CommentsCount int64   `gorm:"default:0" json:"comments_count"`
	IsPublic      bool    `gorm:"default:true" json:"is_public"`
	UserID        uint    `json:"user_id"`
	CategoryID    uint    `json:"category_id"`
}

// Category 分类模型

type Category struct {
	gorm.Model
	Name        string `gorm:"size:50;not null;unique" json:"name"`
	Description string `gorm:"type:text" json:"description"`
}

// Tag 标签模型

type Tag struct {
	gorm.Model
	Name string `gorm:"size:50;not null;unique" json:"name"`
}

// Comment 评论模型

type Comment struct {
	gorm.Model
	Content    string `gorm:"type:text;not null" json:"content"`
	UserID     uint   `gorm:"user_id" json:"user_id"`
	VideoID    uint   `gorm:"video_id" json:"video_id"`
	ParentID   *uint  `gorm:"parent_id" json:"parent_id"`
	LikesCount int64  `gorm:"default:0" json:"likes_count"`
	ReplyToID  uint   `json:"reply_to_id"` // 回复的评论ID，可选
}

// Like 点赞模型

type Like struct {
	gorm.Model
	UserID  uint `gorm:"not null;index:idx_user_video,unique" json:"user_id"`
	VideoID uint `gorm:"not null;index:idx_user_video,unique" json:"video_id"`
}

// Collection 收藏模型

type Collection struct {
	gorm.Model
	UserID  uint `gorm:"not null;index:idx_user_video,unique" json:"user_id"`
	VideoID uint `gorm:"not null;index:idx_user_video,unique" json:"video_id"`
}

// PlayHistory 播放历史模型

type PlayHistory struct {
	gorm.Model
	UserID       uint      `gorm:"not null" json:"user_id"`
	VideoID      uint      `gorm:"not null" json:"video_id"`
	Video        Video     `gorm:"foreignKey:VideoID" json:"video"`
	Progress     float64   `gorm:"default:0" json:"progress"`
	LastPlayedAt time.Time `gorm:"autoUpdateTime" json:"last_played_at"`
}
